[アップデート] AWS Elemental MediaLiveでVPCからの入力がサポートされていました
はじめに
清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveでVPCからの入力(Input)がサポートされていました。
- AWS Elemental MediaLive Adds Support for Encrypted HLS and VPC Inputs
- AWS Elemental MediaLive で、暗号化された HLS 入力と VPC 入力のサポートを追加
2019/03/05にポストされた内容となります。上記ポストでは2つの項目を紹介していますが、本エントリではVPC入力サポートについてのみを扱います。
AWS Elemental MediaLiveで映像入力を受け取るInputのEndpoint、これまでグローバルIPアドレスが前提でしたので、インターネット経由の接続もしくはDirect Connectのパブリック接続を使用して接続する必要がありました。今回のアップデートでVPCからの入力がサポートされ、InputのEndpointにはそのVPC内のプライベートIPアドレスが割り振られます。VPC内のリソースからAWS Elemental MediaLiveのInputへの接続は、VPC内のネットワークで完結することとなります。
AWS Elemental MediaLiveのInputをVPC Modeで作成してみる
では実際に、AWS Elemental MediaLiveのInputをVPC Modeで作成しています。今回はInput typeとしてRTMP(push)を選択しました。
Network modeでデフォルトのPublic
からVPC
を選択します。Select subnets and security groups
またはEneter subnet and security groups
が選択できます。前者の場合はマネジメントコンソールで表示されている一覧からの選択、後者の場合はSubnet Group ID、Security Group IDの値を入力することで設定ができます。
今回はSelect subnets and security groups
を選び、マネジメントコンソールで表示されている一覧からSubnets、Security groupsを選択しました。EC2などと同様、Security GroupはSubnetの属するVPCに紐付いているものしか利用できないので注意しましょう。
なお、Network modeがPublic
のときにはInput security groupの設定箇所もありましたが、VPC
にするとこの箇所がなくなり、VPCのSecurity Group設定がこの役割を担っているということになりますね。
RoleとInput destinationsについても設定し、[Create]でInputを作成します。
作成後はこのように、選択したSubnetのCIDR内、空いているプライベートIPアドレスがEndpointに割り当てられます。
Network Interfaceも割り当てられていますね。もちろん、EC2のマネジメントコンソール側からも確認ができます。
VPC内のリソースからライブ配信してみる
VPC ModeのInputが作成できたので、VPC内のリソースからライブ配信を行ってみます。今回の構成としては、以下としました。
- 自宅のWi-Fiに接続したiPhoneからZixi ON AIRを使って、nginx on EC2にRTMP配信
- nginx on EC2でRTMPを転送して、MediaLiveのVPC Mode InputにRTMP配信
- MediaLiveのDestinationにMediaStoreを指定し書き出されるm3u8にアクセスして配信の視聴確認
VPC内のEC2のみでのライブ配信を行う準備ができなかったため、AWS外のリソース(自宅のWi-Fiに接続したiPhone)からグローバルIPアドレスを持つnginx on EC2にRTMPでまずは配信を行います。nginx on EC2ではnginx-rtmp-moduleを使い、RTMPを転送するよう設定します。転送先をプライベートIPアドレスを持つMediaLiveのVPC Mode Inputとすることで、間接的にVPC内のリソースに配信エンコーダからの映像を伝送します。MediaLiveから先については、DestinationにMediaStoreを指定、検証目的のためClooudFrontは経由せずMediaStoreのリソースを直接参照して配信の視聴確認を行います。
まずはMediaLive側の準備です。先ほど作成したInputリソースに続き、Channelリソースを作成します。MediaLiveのChannelリソースについては、VPC ModeではないPublic Modeのときと変わりありません。Input attachmentsでVPC Modeで作成したInputをAttachしておきます。
続いてnginx on EC2の準備です。MediaLiveのVPC Mode Inputを作成したVPCと同じVPCにAmazon Linux 2を起動します。インスタンスタイプはt3.largeとしました。VPC Mode Input側にポート1935で接続できるよう、またZixi ON AIRからの接続元からもポート1935で接続できるよう、セキュリティグループを設定しておきます。続いて以下の手順でnginxのビルドとインストールを行います。手順は下記ページを参考にしました。
# nginxをダウンロード wget http://nginx.org/download/nginx-1.14.0.tar.gz tar zxf nginx-1.14.0.tar.gz # nginx-rtmp-moduleのダウンロード wget https://github.com/arut/nginx-rtmp-module/archive/master.zip unzip master.zip # makeの際に必要となりそうなモジュールのインストール sudo yum install -y gcc pcre-devel openssl openssl-devel # ./configure & make & make install cd /home/ec2-user/nginx-1.14.0 ./configure --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --prefix=/usr/local/nginx \ --add-module=/home/ec2-user/nginx-rtmp-module-master make sudo make install
インストール完了後、/etc/nginx/nginx.conf
に下記内容を追記します。追記内容はnginx-rtmp-modulesのExample、「Forward live broadcast service」を参考にしました。
rtmp { server{ listen 1935; chunk_size 4096; application [Application Name] { live on; record off; push rtmp://[VPC-Mode-Input-Endpoint]/[ApplicationName]/[Application\ Instance]; } } }
続いて下記の内容で/lib/systemd/system/nginx.service
というファイルをします。これが起動ファイルになります。
[Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
以下コマンドでnginxを起動します。
sudo systemctl start nginx
MediaLiveのChannelもスタートさせ、iPhone上のZixi ON AIRから配信を行ってみます。Zixi ON AIRの配信先にはEC2のグローバルIPアドレスを設定する点に注意しましょう。配信の様子はいつもと変わりありませんが、VPC Modeでの配信ができていることが確認できました。
まとめ
AWS Elemental MediaLiveでアップデートされていた新機能、VPCからの入力サポートについて確認してみました。これまでMediaLiveのInputのEndpointはグローバルIPのみでしたが、今回のアップデートでVPC内ネットワークから直接MediaLiveのInputにアクセスできるようになりました。未検証ですが、Direct Connectのプライベート接続も利用できそうですね。MediaLiveの活用の幅がより広がるアップデートだと思います。引き続き、AWS Elemental MediaLiveをはじめとしたAWS Media Servicesの機能アップデートに注目していきたいと思います。